[DllImport("ole32.dll")]
static extern int ProgIDFromCLSID([In] ref Guid clsid,
[MarshalAs(UnmanagedType.LPWStr)] out string lplpszProgID);
None.
None.
I find it better to turn off PreserveSig for methods that return an HRESULT and have a trailing out parameter, providing that the HRESULT does not have more that one success code (typically S_OK only). This results in a slightly cleaner syntax where the out parameter becomes the return value and a failing HRESULT results in an exception.
[DllImport("ole32.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
static extern string ProgIDFromCLSID([In()]ref Guid clsid);
using System.Diagnostics;
using System.Runtime.Interop;
PreserveSig=true
class Program
{
[DllImport("ole32.dll")]
static extern int ProgIDFromCLSID([In()]ref Guid clsid, [MarshalAs(UnmanagedType.LPWStr)]out string lplpszProgID);
[STAThread()]
static void Main(string[] args)
{
Guid g = new Guid("88D969C0-F192-11D4-A65F-0040963251E5"); // MSXML 4.0 DOM.
string progId;
int result = ProgIDFromCLSID(ref g, out progId);
Debug.Assert(result == 0);
Debug.Assert(progId == "Msxml2.DOMDocument.4.0");
}
}
PreserveSig=false
class Program
{
[DllImport("ole32.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
static extern string ProgIDFromCLSID([In()]ref Guid clsid);
[STAThread()]
static void Main(string[] args)
{
Guid g = new Guid("88D969C0-F192-11D4-A65F-0040963251E5"); // MSXML 4.0 DOM.
string progId = ProgIDFromCLSID(ref g);
Debug.Assert(progId == "Msxml2.DOMDocument.4.0");
}
}
Do you know one? Please contribute it!